package com.loto.e3mall.content.service.impl;

import com.loto.e3mall.common.jedis.JedisClient;
import com.loto.e3mall.common.utils.E3Result;
import com.loto.e3mall.common.utils.JsonUtils;
import com.loto.e3mall.content.service.ContentService;
import com.loto.e3mall.mapper.TbContentMapper;
import com.loto.e3mall.pojo.TbContent;
import com.loto.e3mall.pojo.TbContentExample;
import com.loto.e3mall.pojo.TbContentExample.Criteria;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * Author：蓝田_Loto
 * Date：2019-05-31 18:48
 * PageName：ContentServiceImpl.java
 * Function：内容管理实现类
 */

@Service
public class ContentServiceImpl implements ContentService {
    @Autowired
    private TbContentMapper contentMapper;

    @Autowired
    private JedisClient jedisClient;

    @Value("${CONTENT_LIST}")
    private String CONTENT_LIST;

    // 新增内容
    @Override
    public E3Result addContent(TbContent content) {
        // 将内容数据插入到内容表
        content.setCreated(new Date());
        content.setUpdated(new Date());

        // 插入到数据库
        contentMapper.insert(content);

        // 缓存同步（删除缓存中对应的数据）
        jedisClient.hdel(CONTENT_LIST, content.getCategoryId().toString());
        return E3Result.ok();
    }

    // 根据内容分类id查询内容列表
    @Override
    public List<TbContent> getContentListByCid(long cid) {
        // 查询缓存
        try {
            //（1）如果缓存中有，则直接响应结果
            String json = jedisClient.hget(CONTENT_LIST, cid + "");
            if (StringUtils.isNotBlank(json)) {
                List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
                return list;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //（2）如果缓存中没有，则查询数据库
        TbContentExample example = new TbContentExample();
        Criteria criteria = example.createCriteria();

        // 设置查询条件
        criteria.andCategoryIdEqualTo(cid);

        // 执行查询
        List<TbContent> list = contentMapper.selectByExampleWithBLOBs(example);

        // 把结果添加到缓存
        try {
            jedisClient.hset(CONTENT_LIST, cid + "", JsonUtils.objectToJson(list));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}
